package com.ty.service.impl;

import com.ty.bean.AgentInquiry;
import com.ty.common.crud.BaseServiceImpl;
import com.ty.common.utils.Assert;
import com.ty.common.utils.DateUtils;
import com.ty.mapper.AgentInquiryMapper;
import com.ty.mapper.AgentInquiryProductMapper;
import com.ty.mapper.AgentMapper;
import com.ty.service.AgentInquiryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AgentInquiryServiceImpl extends BaseServiceImpl<AgentInquiry, AgentInquiryMapper> implements AgentInquiryService {
    /**
     * 最大编码
     */
    String maxCode;

    @Autowired
    AgentMapper agentMapper;

    @Autowired
    AgentInquiryProductMapper agentInquiryProductMapper;

    public int save(AgentInquiry entity) {
        //生成编码
        String sn = generateNewCode();

        //先保存询价单
        int rs = agentMapper.save(sn);
        Assert.isZero(rs, "保存货代询价单失败");

        //设置清单中的编码
        entity.setRelationSn(sn);
        //保存清单
        rs=super.save(entity);
        Assert.isZero(rs, "保存货代询价清单失败");

        //保存产品
        if(null!=entity.getAgentInquiryProducts()&&entity.getAgentInquiryProducts().size()>0){
            rs=agentInquiryProductMapper.batchSave(sn,entity.getAgentInquiryProducts());
            Assert.isZero(rs, "保存货代询价产品失败");
        }

        //根据航线和运输方式  查看所有的货代 插入货代报价表 （货代id  询价编码  ）

        return 1;
    }


    @Override
    public int update(AgentInquiry entidy) {
        String sn =maxCode;

        int rs  =super.update(entidy);
        Assert.isZero(rs,"更新货代询价清单失败");

        rs= agentInquiryProductMapper.bathUpdate(sn,entidy.getAgentInquiryProducts());
        Assert.isZero(rs,"批量更新货代询价产品信息失败");
        return 1;
    }



    /**
     * 生成新的编码
     *
     * @return
     */
    String generateNewCode() {

        //获取系统日期
        String ym= DateUtils.getSystemTimeYM();
        //1. 判断 当前内存中是否有最大编码
        if(null==maxCode){
            //如果没有  查询最大编码
            maxCode=agentMapper.queryMaxCode();
            if(null==maxCode){
                //说明当月还没有产生过货代 询价
                maxCode="HDXJ"+ym+"0001";
                return maxCode;
            }
        }

        //获取编码 中的月份 2503
        String codeYm=maxCode.substring(4,8);
        if(!ym.equals(codeYm)){
            //说明当月第一笔
            //说明当月还没有产生过货代 询价
            maxCode="HDXJ"+ym+"0001";
            return maxCode;
        }

        //累加
        //数据库存在当月最大编码   直接累加  HDXJ25030001
        String prefix=maxCode.substring(0,8);
        String seq=maxCode.substring(8);
        int tmp= Integer.parseInt(seq);
        tmp++;
        maxCode=prefix+String.format("%04d",tmp);
        return maxCode;

    }

}
